/**
 * Loading管理器
 * 用于统一管理HTTP请求的loading状态
 * 使用旋转的LoadingProgress组件显示加载效果
 */

type LoadingCallback = (visible: boolean) => void

class LoadingManager {
  private loadingCount: number = 0
  private callback: LoadingCallback | null = null
  
  /**
   * 注册loading状态变化回调
   * 在应用的根组件中调用此方法注册回调
   */
  registerCallback(callback: LoadingCallback): void {
    this.callback = callback
  }
  
  /**
   * 取消注册
   */
  unregisterCallback(): void {
    this.callback = null
  }
  
  /**
   * 显示loading
   */
  show(): void {
    this.loadingCount++
    
    // 只在第一次显示loading时才真正显示
    if (this.loadingCount === 1) {
      this.notifyCallback(true)
    }
  }
  
  /**
   * 隐藏loading
   */
  hide(): void {
    this.loadingCount--
    
    // 确保计数不会小于0
    if (this.loadingCount < 0) {
      this.loadingCount = 0
    }
    
    // 当所有请求都完成时才隐藏loading
    if (this.loadingCount === 0) {
      this.notifyCallback(false)
    }
  }
  
  /**
   * 强制隐藏loading（清空所有计数）
   */
  forceHide(): void {
    this.loadingCount = 0
    this.notifyCallback(false)
  }
  
  /**
   * 通知回调函数
   */
  private notifyCallback(visible: boolean): void {
    try {
      if (this.callback) {
        this.callback(visible)
      }
    } catch (error) {
      console.error('Loading callback执行失败:', error)
    }
  }
}

// 导出单例
export const loadingManager = new LoadingManager()

